Skip to content

Conversation

@kwvg
Copy link
Collaborator

@kwvg kwvg commented Oct 25, 2025

Additional Information

Breaking Changes

None expected.

Checklist

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas (note: N/A)
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone (for repository code-owners and collaborators only)

@kwvg kwvg added this to the 23.1 milestone Oct 25, 2025
@github-actions
Copy link

github-actions bot commented Oct 25, 2025

✅ No Merge Conflicts Detected

This PR currently has no conflicts with other open PRs.

@kwvg kwvg changed the title backport: merge bitcoin#31100, #31626, #31840, #30584, #31982, #32086, #31998, #32505, #32568, #32690, #32731, #32716, #32837, #32266, #30095, #30137, #29876, partial bitcoin#30454 (build backports: part 4) backport: merge bitcoin#31100, #31626, #31840, #30584, #31982, #32086, #31998, #32505, #32568, #32690, #32731, #32716, #32837, #32266, #30095, #30137, #33580, partial bitcoin#30454 (build backports: part 4) Oct 25, 2025
@kwvg
Copy link
Collaborator Author

kwvg commented Oct 25, 2025

Checksums for d7075f9

e609267eb0d2a607bdda00beb3f5fdb9af7ba52ccdfc0621cc150ec583f29eef  dashcore-23.0.0-rc.3-127-gd7075f9aff05-aarch64-linux-gnu-debug.tar.gz
ed65a4b3a1ba99b5a3b8e1d5b531de53cf09a87a23748e698816f86d5556b711  dashcore-23.0.0-rc.3-127-gd7075f9aff05-aarch64-linux-gnu.tar.gz
1e48d5ca3ba31dbf4057d62e069ff2a633d60263435cb96943f31ba59f94719d  dashcore-23.0.0-rc.3-127-gd7075f9aff05-arm64-apple-darwin-unsigned.tar.gz
bd5572b76325f52f3639a9e363d5d860007cfc8a91d58fd9a2fd0d92e1d9158b  dashcore-23.0.0-rc.3-127-gd7075f9aff05-arm64-apple-darwin-unsigned.zip
994767ca6239a20c12191679a1052ba1c1feae51b532a5634cc30c06b97ba865  dashcore-23.0.0-rc.3-127-gd7075f9aff05-arm64-apple-darwin.tar.gz
2ad2660fbe495a3bf19ef853a3e5c8f781c913796d0660aebd4ac433fd7a6143  dashcore-23.0.0-rc.3-127-gd7075f9aff05.tar.gz
13d75b94433919620ab772c0c810a28d7e798e6d3ff1b4e621fa6521147bbae0  dashcore-23.0.0-rc.3-127-gd7075f9aff05-riscv64-linux-gnu-debug.tar.gz
9bc7e0f9f546aea1d63d520571a28a946c53c45d32862695160434ed8b40cc34  dashcore-23.0.0-rc.3-127-gd7075f9aff05-riscv64-linux-gnu.tar.gz
165bb20ecabdb7eb906abad1ad6648ad82a0f8fe48fe77190db533fc26138498  dashcore-23.0.0-rc.3-127-gd7075f9aff05-x86_64-apple-darwin-unsigned.tar.gz
647f18220ce8a779b6d3b2d771c5e28af5ef17cf99721c9a0bc318b65c129d11  dashcore-23.0.0-rc.3-127-gd7075f9aff05-x86_64-apple-darwin-unsigned.zip
b28d44ffa5cb6cabe4e5beae954958008d265bb6bf613b9d3625fee657296259  dashcore-23.0.0-rc.3-127-gd7075f9aff05-x86_64-apple-darwin.tar.gz
40a3b1254a859cec880a63178a73a401181a8cac742fb92ce3dc6896c0592c67  dashcore-23.0.0-rc.3-127-gd7075f9aff05-x86_64-linux-gnu-debug.tar.gz
9b6242d32418f3164946e2f1b840e4ad0aa440770ce43f69959ab21e5b36a49f  dashcore-23.0.0-rc.3-127-gd7075f9aff05-x86_64-linux-gnu.tar.gz
92a78c265ee25927f9e2d09ec0757dce757cb8840d118dc596b1e7e79da41d6b  dashcore-23.0.0-rc.3-127-gd7075f9aff05-win64-debug.zip
488e106ae71096a1f4e64c659d5931e34408b2089703c0c9f5e90339d0594637  dashcore-23.0.0-rc.3-127-gd7075f9aff05-win64-setup-unsigned.exe
600f105910e6f257d00206f4a30607a1fba213fb8c2b885a71e5a822c9ce4738  dashcore-23.0.0-rc.3-127-gd7075f9aff05-win64-unsigned.tar.gz
231fa1664b14c93c8cbce1fb56b92546838ec40a5820d364a4d3e3610d3feabe  dashcore-23.0.0-rc.3-127-gd7075f9aff05-win64.zip

@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.0.0-devpr6919.d7075f9a. A new comment will be made when the image is pushed.

@DashCoreAutoGuix
Copy link

Guix Automation has completed; a release should be present here: https://github.com/dashpay/dash-dev-branches/releases/tag/v23.0.0-devpr6919.d7075f9a. The image should be on dockerhub soon.

@github-actions
Copy link

This pull request has conflicts, please rebase.

PastaPastaPasta added a commit that referenced this pull request Nov 4, 2025
, bitcoin#30387, bitcoin#31461, bitcoin#31484, bitcoin#31498, bitcoin#31552, bitcoin#31627, bitcoin#30774, bitcoin#31125, bitcoin#31661, bitcoin#31800, bitcoin#31500, bitcoin#33494, partial bitcoin#30940 (build backports: part 3)

8e07d33 merge bitcoin#33494: Update URL for `qrencode` package source tarball (Kittywhiskers Van Gogh)
3dd5c1c merge bitcoin#31500: Fix compiling `libevent` package on NetBSD (Kittywhiskers Van Gogh)
be4e492 merge bitcoin#31800: Avoid using the `-ffile-prefix-map` compiler option (Kittywhiskers Van Gogh)
721da49 merge bitcoin#31661: Override default build type for `libevent` (Kittywhiskers Van Gogh)
802232d merge bitcoin#31125: add *FLAGS to gen_id (Kittywhiskers Van Gogh)
29c3c06 merge bitcoin#30774: Qt 5.15.16 (Kittywhiskers Van Gogh)
3dbc289 merge bitcoin#31627: Fix spacing issue (Kittywhiskers Van Gogh)
78ccada merge bitcoin#31552: Update capnproto to 1.1.0 (Kittywhiskers Van Gogh)
aac17f3 merge bitcoin#31498: Ignore prefix directory on OpenBSD (Kittywhiskers Van Gogh)
aa28a18 merge bitcoin#31484: update capnproto to 1.0.2 (Kittywhiskers Van Gogh)
de2dc16 merge bitcoin#31461: add `-g` to *BSD_debug flags (Kittywhiskers Van Gogh)
31881e6 partial bitcoin#30940: Fix build with `MULTIPROCESS=1` in Guix environment (Kittywhiskers Van Gogh)
f73021a merge bitcoin#30387: use c++ compiler rather than c compiler for binary checks (Kittywhiskers Van Gogh)
44ec95a merge bitcoin#29895: remove bzip2 from deps (Kittywhiskers Van Gogh)
86004c5 merge bitcoin#29249: add NM output to gen_id (Kittywhiskers Van Gogh)
dc24acb refactor: point Qt URL to `archives` subdirectory (Kittywhiskers Van Gogh)
13e1bfe refactor: move `windres` fix to `hosts/mingw32.mk` (Kittywhiskers Van Gogh)
b01440d merge bitcoin#28900: remove mingw-w64 install for "older" systems (Kittywhiskers Van Gogh)

Pull request description:

  ## Additional Information

  * Dependency for #6919

  * The current windres fix was introduced by [dash#6294](#6294) to fix mingw32 builds, the problem with the fix is that it assumes the target triple is fixed (i.e. `x86_64-w64-mingw32`), this may not hold true in the long run as Windows for ARM support is currently being tracked upstream (see [bitcoin#31388](bitcoin#31388)).

    To mitigate this, the fix has been generalised by setting the `WINDRES` variable, which is checked by `configure.ac` ([source](https://github.com/dashpay/dash/blob/f7dad69eab573c179060ff9eb1bbaccb317de6d3/configure.ac#L835)).

    * This fix had the effect of breaking detection (see error below) as `test -f` cannot traverse through `PATH` ([source](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/test.html)), this has been resolved by using `command -v`, which is a better fit ([source](https://pubs.opengroup.org/onlinepubs/9799919799/utilities/command.html))

      ```
      make[1]: Entering directory '/distsrc-base/distsrc-23.0.0-rc.3-125-gca749d4d0d58-x86_64-w64-mingw32/src'
      make[2]: Entering directory '/distsrc-base/distsrc-23.0.0-rc.3-125-gca749d4d0d58-x86_64-w64-mingw32/src'
        CXX      dashd-bitcoind.o
      windres x86_64-w64-mingw32-windres not found, but is required to compile windows resource files
      ```

  * Versions below Qt 6.5 are considered (as of this writing), archived ([source](https://download.qt.io/official_releases/qt/)), this results in fetch failures that result in more usage of the cache fallback when trying to fetch Qt 5.15, which is now located in the archives ([source](https://download.qt.io/archive/qt/5.15/)). The URL has been updated to reflect the same.

  * While upstream reverted [bitcoin#33494](bitcoin#33494) with [bitcoin#33577](bitcoin#33577), the reasoning was to do with their cache and its interaction with the release process. As the underlying rationale for the revert doesn't match our case, we can retain the backport.

  ## Breaking Changes

  None expected.

  ## Checklist

  - [x] I have performed a self-review of my own code
  - [x] I have commented my code, particularly in hard-to-understand areas **(note: N/A)**
  - [x] I have added or updated relevant unit/integration/functional/e2e tests **(note: N/A)**
  - [x] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

ACKs for top commit:
  UdjinM6:
    utACK 8e07d33

Tree-SHA512: 3356603fb1f74470656f3df233100da8ff722dd95926c25a251fe542afc85876d6517a45bb015863003ffe485d3f17241e1e5e73fbbcc9b5e90729b429272300
@kwvg
Copy link
Collaborator Author

kwvg commented Nov 4, 2025

Checksums for 15fe09a

00d11550343b3cd30dd81f174856478efc886fabb06cef573020d5e0c2673d13  dashcore-23.0.0-rc.3-279-g15fe09a9e870-aarch64-linux-gnu-debug.tar.gz
007c2a4ded359dc4fcdeb9b55b1168513076e4be260f492c7f9a0d589fae4f32  dashcore-23.0.0-rc.3-279-g15fe09a9e870-aarch64-linux-gnu.tar.gz
89af04b980262142c378582b0de8d597425e6fe5a65ba6bf1364c064436fc960  dashcore-23.0.0-rc.3-279-g15fe09a9e870-arm64-apple-darwin-unsigned.tar.gz
311ccaba8279b74825812ad6fe8d21246cdf5fa13e38bb242e0701c7f3c9303b  dashcore-23.0.0-rc.3-279-g15fe09a9e870-arm64-apple-darwin-unsigned.zip
fb46d052c9e07216bc231eccb5c299e7b505a5943f21e6cfe6558101837f9bd5  dashcore-23.0.0-rc.3-279-g15fe09a9e870-arm64-apple-darwin.tar.gz
ad7e67db789f1d9cbf1ea74cba18bec39c395bd55c9a5b125e7e75bfb6a9a25a  dashcore-23.0.0-rc.3-279-g15fe09a9e870.tar.gz
3fb58c44951967629639d572af52a15df0fe9c85419c2773f9a65780d678581e  dashcore-23.0.0-rc.3-279-g15fe09a9e870-riscv64-linux-gnu-debug.tar.gz
2dd3a741946c46729693234b8f9b3a633fdf877264e97ebafefefdd3c418beb2  dashcore-23.0.0-rc.3-279-g15fe09a9e870-riscv64-linux-gnu.tar.gz
d74c954897792d74af865a4d3282fc3e1d3d048cd1146eaa2da2da54e8190e35  dashcore-23.0.0-rc.3-279-g15fe09a9e870-x86_64-apple-darwin-unsigned.tar.gz
5e2d1a8c48c66a26bcc5e352f5c6c8e9e04fd2bcdf4bfbed7d42a64ce2e639b0  dashcore-23.0.0-rc.3-279-g15fe09a9e870-x86_64-apple-darwin-unsigned.zip
c55e01adff8d81f9f0f86ddc2a9f67999b6bd2f733c484f10f45105eeb9e0cbb  dashcore-23.0.0-rc.3-279-g15fe09a9e870-x86_64-apple-darwin.tar.gz
45ca9edb99d0caa7fd3ca909ca4750feaf847ef35204a216327150ce94e1c690  dashcore-23.0.0-rc.3-279-g15fe09a9e870-x86_64-linux-gnu-debug.tar.gz
bc1a6e6e753197b272836fbbb102a6af295c85ed1181f83065d5ca1a4e76b5f0  dashcore-23.0.0-rc.3-279-g15fe09a9e870-x86_64-linux-gnu.tar.gz
a66822b78a9340f35ff1bb37578d6d4df7d2e2b979318805f9e988b922202313  dashcore-23.0.0-rc.3-279-g15fe09a9e870-win64-debug.zip
465a14c1affdead08c533130fa60709f0863d75e23a7f99f7815bb8db2c33ee5  dashcore-23.0.0-rc.3-279-g15fe09a9e870-win64-setup-unsigned.exe
349c2321dd2706357a704aebede298027f3e4795e44e4083201c84d5c6d92a69  dashcore-23.0.0-rc.3-279-g15fe09a9e870-win64-unsigned.tar.gz
54de1bce22ade7f3bdbbc99fa12360ead0ea05812c336d23bc3a41832e797cb5  dashcore-23.0.0-rc.3-279-g15fe09a9e870-win64.zip

@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.0.0-devpr6919.15fe09a9. A new comment will be made when the image is pushed.

@DashCoreAutoGuix
Copy link

Guix Automation has completed; a release should be present here: https://github.com/dashpay/dash-dev-branches/releases/tag/v23.0.0-devpr6919.15fe09a9. The image should be on dockerhub soon.

@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.0.0-devpr6919.44b14852. A new comment will be made when the image is pushed.

@kwvg
Copy link
Collaborator Author

kwvg commented Nov 8, 2025

Checksums for 44b1485

0cff5caaca64bd5ef8ab90096ddbaa265ef29afb51c2b2d9d28c567fbb706076  dashcore-23.0.0-rc.3-329-g44b148523a87-aarch64-linux-gnu-debug.tar.gz
961e1570aa74dbe956f91f63be9949a68b0ba0631b944d312f69a032cca8ddc5  dashcore-23.0.0-rc.3-329-g44b148523a87-aarch64-linux-gnu.tar.gz
61a4ce9ae827ab2a593b3e7155a578b6df8ad7399d03dff691b279e1833b6051  dashcore-23.0.0-rc.3-329-g44b148523a87-arm64-apple-darwin-unsigned.tar.gz
60d59f1a69500349b08893aaeda09d746f63d38eeb352225af13894ef0519737  dashcore-23.0.0-rc.3-329-g44b148523a87-arm64-apple-darwin-unsigned.zip
42212c684ecbaf99c7af000241c6ebb9ba5ded1f0e172b3da3629dab0bc82980  dashcore-23.0.0-rc.3-329-g44b148523a87-arm64-apple-darwin.tar.gz
581fc1ef90c15729a6f7acd002ab17629fe80502ebd59de9d7c14463f18d7617  dashcore-23.0.0-rc.3-329-g44b148523a87.tar.gz
590fe40c06e678188edf6eefc63f7bb9d4edd9c4bedfc67b17fee42a94ad5856  dashcore-23.0.0-rc.3-329-g44b148523a87-riscv64-linux-gnu-debug.tar.gz
6f60fdbc2f0064104eaf34fe90d5d5d9ce7175a0233c7af419ac0ba6849b560e  dashcore-23.0.0-rc.3-329-g44b148523a87-riscv64-linux-gnu.tar.gz
2a08fd5f771868c45a19d770cf8ec9989fc67856686ffa86078ce6152c9152a5  dashcore-23.0.0-rc.3-329-g44b148523a87-x86_64-apple-darwin-unsigned.tar.gz
d883d3bf420a4429b8e629946981f237cd7b54c5e1f632e023f3d1ae62fc29e0  dashcore-23.0.0-rc.3-329-g44b148523a87-x86_64-apple-darwin-unsigned.zip
940709bf94c033156f9e5e1ab2cc77f8c274c1f712d2ec8d7d30af3a1d44301c  dashcore-23.0.0-rc.3-329-g44b148523a87-x86_64-apple-darwin.tar.gz
868d3b58689ff2c7ae84b4057223ba84643e14d1487e54dfc13f82238bafca42  dashcore-23.0.0-rc.3-329-g44b148523a87-x86_64-linux-gnu-debug.tar.gz
53ba2addfdf4f7fccd14e084bf84788480f5125ce177b226c6b5ccf1880de502  dashcore-23.0.0-rc.3-329-g44b148523a87-x86_64-linux-gnu.tar.gz
b7e73904cd62a52edc58fe677d1d51721d0d4f41534e17a20a98d426d01e300f  dashcore-23.0.0-rc.3-329-g44b148523a87-win64-debug.zip
664f954e0e946c61ccb01fb7fdf662447f57775c71abdb4f632f071a04a16c2f  dashcore-23.0.0-rc.3-329-g44b148523a87-win64-setup-unsigned.exe
a99b314ba7913e338d33dfc1a018c7d03dab11c23bd83548fc838e2a7f7212df  dashcore-23.0.0-rc.3-329-g44b148523a87-win64-unsigned.tar.gz
ae8d1a4566e440f29b76700d8bccf2d1d4dd03e9147a4f97ed226684af72c73d  dashcore-23.0.0-rc.3-329-g44b148523a87-win64.zip

@DashCoreAutoGuix
Copy link

Guix Automation has completed; a release should be present here: https://github.com/dashpay/dash-dev-branches/releases/tag/v23.0.0-devpr6919.44b14852. The image should be on dockerhub soon.

@kwvg kwvg marked this pull request as ready for review November 12, 2025 15:56
@coderabbitai
Copy link

coderabbitai bot commented Nov 12, 2025

Walkthrough

Broadens FreeBSD handling across build scripts and depends, removes configure-time thread_local detection, changes thread-name storage from thread-local std::string to a per-thread fixed char buffer and updates related APIs and call sites, introduces multiple package/patch additions and adjustments (capnp, libevent, libmultiprocess, qt FreeBSD wiring), and updates config.{sub,guess}, M4, Makefiles, documentation, and related build helpers.

Sequence Diagram(s)

mermaid
sequenceDiagram
participant User as Developer runs ./configure
participant Autoconf as configure.ac
participant M4 as build-aux/m4/bitcoin_qt.m4
participant Build as depends Makefiles
Note over Autoconf,Build: Host/OS detection and package wiring
User->>Autoconf: Run configure
Autoconf->>Autoconf: detect HOST/BUILD; TARGET_OS may be linux|freebsd|...
Autoconf->>M4: generate Qt probing rules
M4->>Build: enable QT_QPA_PLATFORM_XCB when linux or freebsd
Build->>Build: select qt_freebsd_packages := qt_linux_packages
Build-->>User: configure and make targets prepared

mermaid
sequenceDiagram
participant Thread as Any thread
participant API as util/threadnames
participant Buffer as per-thread char[128]
Thread->>API: ThreadRename(const std::string& name)
API->>Buffer: copy up to 127 chars, null-terminate
Thread->>API: ThreadGetInternalName()
API->>Buffer: read buffer, return std::string
Note right of Buffer: fixed per-thread storage, no thread_local std::string destructors

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Key areas requiring careful review:

  • src/util/threadnames.{h,cpp}: API signature changes, buffer size/safety, call-site compatibility.
  • src/sync.cpp: CLockLocation constructor and member change from reference to owned std::string; check callers and lifetime.
  • src/init/common.cpp and tests: removal of configure-time thread_local probe and always-registering -logthreadnames; validate behavior on platforms lacking thread_local.
  • build-aux/m4/bitcoin_qt.m4, depends/packages/qt.mk, depends/packages/packages.mk: Qt probing for FreeBSD and package wiring; ensure correct detection and packaging.
  • configure.ac and depends/Makefile: removal of AC_ARG_ENABLE([threadlocal]) and host canonicalization reorder — verify cross-compile and host detection effects.
  • depends/* (config.sub, config.guess, funcs.mk, builders/, packages/): many heterogeneous changes and new patches (capnp, libevent, native_capnp); confirm patches apply and builders/tools (clang/sha utilities) are correct.
  • contrib/devtools/symbol-check.py: removal of ELF exported-symbols check and PE allowed DLL changes — understand CI/packaging implications.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title clearly describes a series of backported Bitcoin commits related to build system improvements, directly matching the changeset which includes extensive build configuration, dependency, and platform-related modifications.
Description check ✅ Passed The PR description clearly relates to the changeset: it addresses binary verification issues in PE and ELF binaries, adding dbghelp.dll to allowed libraries and disabling an exported symbols check that was failing post-compilation.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
depends/README.md (1)

100-100: Optional: Consider hyphenating compound modifier.

The phrase "-flto related options" could be written as "-flto-related options" for improved readability, though this is a minor style consideration.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d56bff5 and 44b1485.

📒 Files selected for processing (29)
  • build-aux/m4/bitcoin_qt.m4 (1 hunks)
  • configure.ac (1 hunks)
  • depends/Makefile (1 hunks)
  • depends/README.md (4 hunks)
  • depends/builders/freebsd.mk (1 hunks)
  • depends/builders/openbsd.mk (1 hunks)
  • depends/config.guess (8 hunks)
  • depends/config.sub (20 hunks)
  • depends/funcs.mk (1 hunks)
  • depends/hosts/darwin.mk (1 hunks)
  • depends/packages/capnp.mk (2 hunks)
  • depends/packages/libevent.mk (2 hunks)
  • depends/packages/native_capnp.mk (1 hunks)
  • depends/packages/native_libmultiprocess.mk (1 hunks)
  • depends/packages/packages.mk (1 hunks)
  • depends/packages/qt.mk (2 hunks)
  • depends/packages/xproto.mk (1 hunks)
  • depends/patches/capnp/abi_placement_new.patch (1 hunks)
  • depends/patches/capnp/fix_openbsd_build.patch (1 hunks)
  • depends/patches/libevent/winver_fixup.patch (1 hunks)
  • depends/patches/native_capnp/fix_openbsd_build.patch (1 hunks)
  • doc/build-windows.md (1 hunks)
  • doc/design/multiprocess.md (4 hunks)
  • src/init/common.cpp (0 hunks)
  • src/sync.cpp (2 hunks)
  • src/test/util/setup_common.h (1 hunks)
  • src/test/util_threadnames_tests.cpp (0 hunks)
  • src/util/threadnames.cpp (2 hunks)
  • src/util/threadnames.h (1 hunks)
💤 Files with no reviewable changes (2)
  • src/test/util_threadnames_tests.cpp
  • src/init/common.cpp
🧰 Additional context used
📓 Path-based instructions (4)
depends/**

📄 CodeRabbit inference engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the depends directory (dependency build system)

Files:

  • depends/builders/openbsd.mk
  • depends/packages/native_capnp.mk
  • depends/funcs.mk
  • depends/patches/capnp/fix_openbsd_build.patch
  • depends/patches/libevent/winver_fixup.patch
  • depends/builders/freebsd.mk
  • depends/packages/capnp.mk
  • depends/config.sub
  • depends/packages/libevent.mk
  • depends/config.guess
  • depends/packages/packages.mk
  • depends/hosts/darwin.mk
  • depends/packages/xproto.mk
  • depends/patches/native_capnp/fix_openbsd_build.patch
  • depends/patches/capnp/abi_placement_new.patch
  • depends/packages/native_libmultiprocess.mk
  • depends/packages/qt.mk
  • depends/README.md
  • depends/Makefile
src/**/*.{cpp,h,cc,cxx,hpp}

📄 CodeRabbit inference engine (CLAUDE.md)

src/**/*.{cpp,h,cc,cxx,hpp}: Dash Core C++ codebase must be written in C++20 and require at least Clang 16 or GCC 11.1
Dash uses unordered_lru_cache for efficient caching with LRU eviction

Files:

  • src/test/util/setup_common.h
  • src/util/threadnames.h
  • src/util/threadnames.cpp
  • src/sync.cpp
src/{test,wallet/test,qt/test}/**/*.{cpp,h,cc,cxx,hpp}

📄 CodeRabbit inference engine (CLAUDE.md)

Unit tests for C++ code should be placed in src/test/, src/wallet/test/, or src/qt/test/ and use Boost::Test or Qt 5 for GUI tests

Files:

  • src/test/util/setup_common.h
doc/**

📄 CodeRabbit inference engine (CLAUDE.md)

Unless specifically prompted, avoid making changes to the doc directory (documentation)

Files:

  • doc/build-windows.md
  • doc/design/multiprocess.md
🧠 Learnings (6)
📓 Common learnings
Learnt from: knst
Repo: dashpay/dash PR: 6871
File: contrib/guix/libexec/build.sh:358-360
Timestamp: 2025-10-05T20:38:28.457Z
Learning: In the Dash repository, when backporting code from Bitcoin Core, typos and minor issues in comments should be kept as-is to reduce merge conflicts in future backports, even if they remain unfixed in Bitcoin Core's master branch.
Learnt from: knst
Repo: dashpay/dash PR: 6916
File: src/univalue/include/univalue.h:81-88
Timestamp: 2025-10-25T07:08:51.918Z
Learning: For backport PRs from bitcoin/bitcoin, bitcoin-core/gui, etc., backported changes should match the original upstream PRs even if they appear strange, modify vendored code, or seem to violate coding guidelines. Still flag genuine issues like bugs, undefined behavior, crashes, compilation errors, or linter failures.
Learnt from: kwvg
Repo: dashpay/dash PR: 6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: knst
Repo: dashpay/dash PR: 6883
File: src/rpc/rawtransaction.cpp:1088-1125
Timestamp: 2025-10-13T12:37:12.357Z
Learning: In backport pull requests (especially from Bitcoin Core), treat "moved" or refactored code as out-of-scope for content-level review. Focus validation on verifying that code is moved correctly: no fields added, no fields removed, no fields reordered, and no unexpected changes beyond whitespace adjustments. Pre-existing issues in the upstream code should be preserved to maintain fidelity to the original implementation.
Learnt from: PastaPastaPasta
Repo: dashpay/dash PR: 6804
File: src/qt/proposalwizard.cpp:40-42
Timestamp: 2025-08-11T17:16:36.654Z
Learning: In the Dash repository, when a PR adds new files that are not from Bitcoin backports, these files must be added to the list in test/util/data/non-backported.txt. This applies to newly created files like qt/proposalwizard.{h,cpp} and forms/proposalwizard.ui. Limited exemptions may exist for subtrees and similar cases.
Learnt from: UdjinM6
Repo: dashpay/dash PR: 6786
File: ci/test/04_install.sh:99-101
Timestamp: 2025-08-01T07:46:37.840Z
Learning: In backport PRs like #6786, UdjinM6 prefers to defer non-critical fixes (such as shell command expansion issues) to separate commits/PRs to maintain focus on the primary backport objectives, consistent with the project's pattern of avoiding scope creep.
📚 Learning: 2025-09-09T13:04:06.013Z
Learnt from: kwvg
Repo: dashpay/dash PR: 6837
File: src/compat/compat.h:0-0
Timestamp: 2025-09-09T13:04:06.013Z
Learning: WSAEISCONN is only used within WIN32 conditional compilation blocks in the codebase, so it doesn't require errno mapping for non-Windows platforms in src/compat/compat.h.

Applied to files:

  • depends/patches/libevent/winver_fixup.patch
📚 Learning: 2025-01-06T09:51:03.167Z
Learnt from: kwvg
Repo: dashpay/dash PR: 6516
File: depends/patches/gmp/include_ldflags_in_configure.patch:557-621
Timestamp: 2025-01-06T09:51:03.167Z
Learning: The `GMP_GCC_ARM_UMODSI` macro checks only the compiler version, and `GMP_GCC_MIPS_O32` relies on the `-mabi=32` flag. Therefore, `$LDFLAGS` is irrelevant to these tests.

Applied to files:

  • configure.ac
  • depends/packages/qt.mk
📚 Learning: 2025-10-25T07:08:51.918Z
Learnt from: knst
Repo: dashpay/dash PR: 6916
File: src/univalue/include/univalue.h:81-88
Timestamp: 2025-10-25T07:08:51.918Z
Learning: The univalue library (in src/univalue/) is no longer a vendored external dependency but is now part of the Bitcoin Core codebase and can be modified as needed during backports.

Applied to files:

  • depends/packages/native_libmultiprocess.mk
📚 Learning: 2025-07-20T18:42:49.794Z
Learnt from: CR
Repo: dashpay/dash PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-07-20T18:42:49.794Z
Learning: Applies to depends/** : Unless specifically prompted, avoid making changes to the depends directory (dependency build system)

Applied to files:

  • depends/README.md
  • depends/Makefile
📚 Learning: 2025-07-14T10:11:05.011Z
Learnt from: kwvg
Repo: dashpay/dash PR: 6754
File: contrib/containers/guix/docker-compose.yml:18-19
Timestamp: 2025-07-14T10:11:05.011Z
Learning: In the Guix build process for Dash Core, the `guix.sigs` directory requires write access as signatures are written to it during the build process, and `dash-detached-sigs` may be updated with `git pull` operations, so both directories need rw permissions in the Docker volume mounts.

Applied to files:

  • doc/build-windows.md
🧬 Code graph analysis (1)
src/util/threadnames.h (1)
src/util/threadnames.cpp (6)
  • ThreadRename (59-63)
  • ThreadRename (59-59)
  • ThreadSetInternalName (65-68)
  • ThreadSetInternalName (65-65)
  • ThreadGetInternalName (49-49)
  • ThreadGetInternalName (49-49)
🪛 checkmake (0.2.2)
depends/Makefile

[warning] 74-74: Target "host" should be declared PHONY.

(phonydeclared)


[warning] 76-76: Target "host" should be declared PHONY.

(phonydeclared)

🪛 LanguageTool
depends/README.md

[grammar] ~100-~100: Use a hyphen to join words.
Context: ...ons needed for LTO. Does not add -flto related options to *FLAGS. - `NO_HARDEN=...

(QB_NEW_EN_HYPHEN)

🔇 Additional comments (31)
depends/packages/native_libmultiprocess.mk (1)

3-3: Dependency source updated to official Bitcoin Core repository.

The download source has been migrated from the chaincodelabs fork to the official Bitcoin Core libmultiprocess repository. This is consistent with the documentation updates in the PR.

doc/design/multiprocess.md (2)

22-22: Link references updated to official Bitcoin Core repository.

Documentation links have been consistently updated from chaincodelabs to bitcoin-core libmultiprocess throughout the file, aligning with the dependency package change.

Also applies to: 35-35


39-56: Expanded documentation provides clearer architecture overview.

The documentation has been enhanced to better explain the cross-process interface implementation, including clarification that proxy classes are thin wrappers around Cap'n Proto client/server classes handling serialization and socket communication. This improves clarity for developers understanding the multiprocess architecture.

src/util/threadnames.h (1)

15-22: LGTM: API signatures updated consistently.

The function signatures have been updated to support the new fixed-buffer storage strategy:

  • ThreadRename and ThreadSetInternalName now accept const std::string& (more flexible than rvalue reference)
  • ThreadGetInternalName returns by value (necessary since internal storage is now a char buffer)

These changes align correctly with the implementation in src/util/threadnames.cpp.

src/sync.cpp (2)

44-49: LGTM: Thread name now stored by value.

The CLockLocation constructor and member have been updated to store the thread name by value instead of by reference. This change is necessary because util::ThreadGetInternalName() now returns std::string by value (from the fixed-size char buffer). The use of std::move correctly transfers ownership of the temporary string.


67-67: LGTM: Member declaration matches the move-based initialization.

The member type correctly changed from const std::string& to const std::string to store the value directly, matching the move-based initialization in the constructor.

src/util/threadnames.cpp (4)

42-48: LGTM: Clear documentation of design rationale.

The comment explains the use of a char array instead of std::string to avoid destructor complications when threads exit, with a reference to the specific FreeBSD bug. This is valuable documentation for future maintainers.


48-49: LGTM: Safe thread-local storage with proper return.

The fixed-size buffer (128 bytes) is thread-local, preventing data races. ThreadGetInternalName correctly constructs and returns a std::string from the null-terminated buffer.


52-57: LGTM: Safe bounded string copy with null termination.

The implementation correctly:

  • Limits copy to 127 characters (leaving room for null terminator)
  • Uses std::memcpy with calculated bounds
  • Explicitly null-terminates the buffer

Thread names longer than 127 characters will be silently truncated, which is acceptable given that OS-level thread names are typically limited to 15-16 characters anyway.


59-68: LGTM: Function signatures updated consistently.

Both ThreadRename and ThreadSetInternalName now accept const std::string& instead of std::string&&, providing more flexibility while maintaining efficiency through the internal SetInternalName function.

src/test/util/setup_common.h (1)

51-52: LGTM: Documentation updated to reflect new threading approach.

The comment has been simplified to remove the suggestion of using thread_local, aligning with the broader PR's shift away from thread_local variables toward runtime-configurable per-thread handling.

depends/funcs.mk (1)

36-39: LGTM: Fallback now uses consistent filename argument.

The change makes the fallback invocation consistent with the primary call on line 37, where $(4) (the actual filename) is passed for both the third and fourth arguments to fetch_file_inner. This ensures the fallback download path uses the same file naming convention.

depends/hosts/darwin.mk (1)

22-22: LGTM: Adds llvm-objcopy detection for Darwin.

The addition follows the established pattern for tool detection in this file and is consistent with the broader Darwin/BSD tooling improvements in this PR.

depends/packages/xproto.mk (1)

24-28: LGTM: Fixes mkdir detection on Alpine Linux.

The explicit MKDIRPROG="mkdir -p" setting works around platform-specific detection issues and prevents parallelism problems during installation. The comment clearly documents the rationale.

depends/builders/freebsd.mk (1)

1-9: LGTM: Adds FreeBSD host support.

The changes appropriately configure FreeBSD as both a build and host platform:

  • Updates SHA256SUM to use sha256sum (standard FreeBSD command)
  • Sets clang/clang++ as default compilers for FreeBSD hosts
  • Consistent with the existing FreeBSD builder configuration

These align with the PR's objective to extend FreeBSD support in the build system.

depends/patches/native_capnp/fix_openbsd_build.patch (1)

1-71: LGTM: Patches capnp for OpenBSD compatibility.

This patch correctly addresses two OpenBSD build issues:

  1. Lines 1-34: Broadens netinet/in.h inclusion to all non-Windows systems, not just FreeBSD. This is more portable and fixes OpenBSD builds.

  2. Lines 36-71: Excludes OpenBSD from KJ_USE_KQUEUE because OpenBSD's kqueue doesn't support user event filters (EVFILT_USER), causing build failures. Falls back to poll()-based implementation.

Both changes reference upstream capnproto discussions and follow standard patch format.

configure.ac (1)

965-968: LGTM: Adds FreeBSD host detection.

The new FreeBSD case appropriately sets TARGET_OS=freebsd when building for FreeBSD hosts. This follows the established pattern for other operating systems and integrates with the FreeBSD support added throughout this PR.

depends/Makefile (1)

74-80: LGTM: Improves host override handling.

The reordered initialization logic now properly supports HOST overrides:

  • host is initially derived from build
  • HOST can override this value (or defaults to BUILD)
  • canonical_host is computed from the (potentially overridden) HOST

This provides more flexible cross-compilation support and aligns with the FreeBSD host detection added in this PR.

Note: The static analysis warnings about PHONY declarations are false positives—these are variable assignments, not make targets.

doc/build-windows.md (2)

30-31: LGTM: Consolidates dependency documentation.

Referencing the centralized dependency documentation in depends/README.md and dependencies.md reduces duplication and ensures consistency across the documentation.


37-51: LGTM: Documents WSL Win32 interoperability workaround.

The added WSL note correctly identifies a real build issue where Win32 application launch support can cause unexpected behavior (error dialogs, library issues) during configure. The documented workaround (temporarily disabling binfmt_misc Win32 support) is appropriate and includes both disable and re-enable steps.

depends/packages/capnp.mk (1)

7-20: LGTM: Patch workflow properly implemented.

The patch declarations and preprocessing commands correctly mirror the pattern used in native_capnp.mk, with consistent use of patch -p2 for both patches.

depends/packages/packages.mk (1)

13-13: LGTM: FreeBSD Qt packages properly aliased.

The FreeBSD Qt package set correctly reuses the Linux Qt packages, maintaining parity across platforms consistent with the approach in qt.mk.

build-aux/m4/bitcoin_qt.m4 (1)

151-153: LGTM: FreeBSD correctly added to XCB platform check.

The conditional properly extends Linux behavior to FreeBSD using the -o operator, enabling QT_QPA_PLATFORM_XCB and XCB integration plugin for FreeBSD builds.

depends/packages/native_capnp.mk (1)

7-17: LGTM: Patch workflow correctly implemented.

The patch declaration and preprocessing command are consistent with the approach in capnp.mk, properly using patch -p2 to apply the OpenBSD build fix.

depends/patches/capnp/fix_openbsd_build.patch (1)

1-71: LGTM: Well-documented OpenBSD build fixes.

Both patches are properly formatted with clear rationale:

  • Patch 1/2 broadens netinet/in.h inclusion to all non-Windows systems
  • Patch 2/2 correctly excludes OpenBSD from kqueue usage due to missing user event filter support
depends/packages/qt.mk (2)

7-8: LGTM: FreeBSD dependencies correctly aliased.

The FreeBSD dependencies properly reuse Linux dependencies using simple assignment, maintaining consistency with the cross-platform approach.


163-163: LGTM: FreeBSD config options correctly reference Linux options.

The recursive reference using $$ properly defers expansion of the Linux config options for FreeBSD builds.

depends/patches/libevent/winver_fixup.patch (1)

1-122: LGTM: Windows header ordering correctly fixed.

The patch properly ensures _WIN32_WINNT and WIN32_LEAN_AND_MEAN are defined before any Windows header inclusion across multiple libevent source files, preventing header inclusion order issues.

depends/README.md (3)

1-6: LGTM: Improved documentation structure.

The new "Depends build" header and introduction clearly describe the depends system and its cross-compilation support.


28-54: LGTM: BSD platform instructions added.

The FreeBSD, NetBSD, and OpenBSD sections provide clear, platform-specific build instructions with appropriate package installation commands.


69-104: LGTM: Comprehensive dependency options documented.

The new "Dependency Options" section clearly lists all available make variables and NO_* flags, improving usability for developers configuring custom builds.

Copy link
Member

@PastaPastaPasta PastaPastaPasta left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

light utACK (diff looks proper; didn't compare commit by commit in detail)

@DashCoreAutoGuix
Copy link

Guix Automation has began to build this PR tagged as v23.0.0-devpr6919.8e79c7ac. A new comment will be made when the image is pushed.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/util/threadnames.cpp (1)

9-13: Missing <algorithm> include for std::min.

This will fail to compile on some toolchains.

Apply:

 #if defined(HAVE_CONFIG_H)
 #include <config/bitcoin-config.h>
 #endif

-#include <cstring>
+#include <cstring>
+#include <algorithm>
 #include <string>
 #include <thread>
 #include <utility>
🧹 Nitpick comments (1)
build-aux/m4/bitcoin_qt.m4 (1)

151-154: Align static Qt XCB deps for FreeBSD too.

You added FreeBSD to the XCB plugin check, but _BITCOIN_QT_CHECK_STATIC_LIBS still gates XcbQpa/XkbCommonSupport/etc. on TARGET_OS=linux only. This may miss static deps on FreeBSD and cause link errors.

Consider broadening that condition similarly:

-  if test "$TARGET_OS" = "linux"; then
+  if test "$TARGET_OS" = "linux" -o "$TARGET_OS" = "freebsd"; then
     PKG_CHECK_MODULES([QT_INPUT], [${qt_lib_prefix}InputSupport], [QT_LIBS="$QT_INPUT_LIBS $QT_LIBS"])
     PKG_CHECK_MODULES([QT_SERVICE], [${qt_lib_prefix}ServiceSupport], [QT_LIBS="$QT_SERVICE_LIBS $QT_LIBS"])
     PKG_CHECK_MODULES([QT_XCBQPA], [${qt_lib_prefix}XcbQpa], [QT_LIBS="$QT_XCBQPA_LIBS $QT_LIBS"])
     PKG_CHECK_MODULES([QT_XKBCOMMON], [${qt_lib_prefix}XkbCommonSupport], [QT_LIBS="$QT_XKBCOMMON_LIBS $QT_LIBS"])
   elif test "$TARGET_OS" = "darwin"; then

Based on learnings.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 924558c and 8e79c7a.

📒 Files selected for processing (30)
  • build-aux/m4/bitcoin_qt.m4 (1 hunks)
  • configure.ac (2 hunks)
  • contrib/devtools/symbol-check.py (2 hunks)
  • depends/Makefile (1 hunks)
  • depends/README.md (4 hunks)
  • depends/builders/freebsd.mk (1 hunks)
  • depends/builders/openbsd.mk (1 hunks)
  • depends/config.guess (8 hunks)
  • depends/config.sub (20 hunks)
  • depends/funcs.mk (1 hunks)
  • depends/hosts/darwin.mk (1 hunks)
  • depends/packages/capnp.mk (2 hunks)
  • depends/packages/libevent.mk (2 hunks)
  • depends/packages/native_capnp.mk (1 hunks)
  • depends/packages/native_libmultiprocess.mk (1 hunks)
  • depends/packages/packages.mk (1 hunks)
  • depends/packages/qt.mk (2 hunks)
  • depends/packages/xproto.mk (1 hunks)
  • depends/patches/capnp/abi_placement_new.patch (1 hunks)
  • depends/patches/capnp/fix_openbsd_build.patch (1 hunks)
  • depends/patches/libevent/winver_fixup.patch (1 hunks)
  • depends/patches/native_capnp/fix_openbsd_build.patch (1 hunks)
  • doc/build-windows.md (1 hunks)
  • doc/design/multiprocess.md (4 hunks)
  • src/init/common.cpp (0 hunks)
  • src/sync.cpp (2 hunks)
  • src/test/util/setup_common.h (1 hunks)
  • src/test/util_threadnames_tests.cpp (0 hunks)
  • src/util/threadnames.cpp (2 hunks)
  • src/util/threadnames.h (1 hunks)
💤 Files with no reviewable changes (2)
  • src/test/util_threadnames_tests.cpp
  • src/init/common.cpp
🚧 Files skipped from review as they are similar to previous changes (13)
  • depends/patches/capnp/fix_openbsd_build.patch
  • depends/builders/openbsd.mk
  • src/test/util/setup_common.h
  • depends/packages/native_capnp.mk
  • depends/packages/xproto.mk
  • src/util/threadnames.h
  • depends/hosts/darwin.mk
  • src/sync.cpp
  • depends/packages/capnp.mk
  • doc/design/multiprocess.md
  • depends/packages/packages.mk
  • depends/packages/libevent.mk
  • doc/build-windows.md
🧰 Additional context used
🧠 Learnings (4)
📓 Common learnings
Learnt from: knst
Repo: dashpay/dash PR: 6871
File: contrib/guix/libexec/build.sh:358-360
Timestamp: 2025-10-05T20:38:28.457Z
Learning: In the Dash repository, when backporting code from Bitcoin Core, typos and minor issues in comments should be kept as-is to reduce merge conflicts in future backports, even if they remain unfixed in Bitcoin Core's master branch.
Learnt from: knst
Repo: dashpay/dash PR: 6916
File: src/univalue/include/univalue.h:81-88
Timestamp: 2025-10-25T07:08:51.918Z
Learning: For backport PRs from bitcoin/bitcoin, bitcoin-core/gui, etc., backported changes should match the original upstream PRs even if they appear strange, modify vendored code, or seem to violate coding guidelines. Still flag genuine issues like bugs, undefined behavior, crashes, compilation errors, or linter failures.
Learnt from: kwvg
Repo: dashpay/dash PR: 6543
File: src/wallet/receive.cpp:240-251
Timestamp: 2025-02-06T14:34:30.466Z
Learning: Pull request #6543 is focused on move-only changes and refactoring, specifically backporting from Bitcoin. Behavior changes should be proposed in separate PRs.
Learnt from: knst
Repo: dashpay/dash PR: 6883
File: src/rpc/rawtransaction.cpp:1088-1125
Timestamp: 2025-10-13T12:37:12.357Z
Learning: In backport pull requests (especially from Bitcoin Core), treat "moved" or refactored code as out-of-scope for content-level review. Focus validation on verifying that code is moved correctly: no fields added, no fields removed, no fields reordered, and no unexpected changes beyond whitespace adjustments. Pre-existing issues in the upstream code should be preserved to maintain fidelity to the original implementation.
Learnt from: PastaPastaPasta
Repo: dashpay/dash PR: 6804
File: src/qt/proposalwizard.cpp:40-42
Timestamp: 2025-08-11T17:16:36.654Z
Learning: In the Dash repository, when a PR adds new files that are not from Bitcoin backports, these files must be added to the list in test/util/data/non-backported.txt. This applies to newly created files like qt/proposalwizard.{h,cpp} and forms/proposalwizard.ui. Limited exemptions may exist for subtrees and similar cases.
Learnt from: UdjinM6
Repo: dashpay/dash PR: 6786
File: ci/test/04_install.sh:99-101
Timestamp: 2025-08-01T07:46:37.840Z
Learning: In backport PRs like #6786, UdjinM6 prefers to defer non-critical fixes (such as shell command expansion issues) to separate commits/PRs to maintain focus on the primary backport objectives, consistent with the project's pattern of avoiding scope creep.
📚 Learning: 2025-10-25T07:08:51.918Z
Learnt from: knst
Repo: dashpay/dash PR: 6916
File: src/univalue/include/univalue.h:81-88
Timestamp: 2025-10-25T07:08:51.918Z
Learning: The univalue library (in src/univalue/) is no longer a vendored external dependency but is now part of the Bitcoin Core codebase and can be modified as needed during backports.

Applied to files:

  • depends/packages/native_libmultiprocess.mk
📚 Learning: 2025-01-06T09:51:03.167Z
Learnt from: kwvg
Repo: dashpay/dash PR: 6516
File: depends/patches/gmp/include_ldflags_in_configure.patch:557-621
Timestamp: 2025-01-06T09:51:03.167Z
Learning: The `GMP_GCC_ARM_UMODSI` macro checks only the compiler version, and `GMP_GCC_MIPS_O32` relies on the `-mabi=32` flag. Therefore, `$LDFLAGS` is irrelevant to these tests.

Applied to files:

  • configure.ac
  • depends/packages/qt.mk
  • depends/config.sub
📚 Learning: 2025-09-09T13:04:06.013Z
Learnt from: kwvg
Repo: dashpay/dash PR: 6837
File: src/compat/compat.h:0-0
Timestamp: 2025-09-09T13:04:06.013Z
Learning: WSAEISCONN is only used within WIN32 conditional compilation blocks in the codebase, so it doesn't require errno mapping for non-Windows platforms in src/compat/compat.h.

Applied to files:

  • depends/patches/libevent/winver_fixup.patch
🪛 checkmake (0.2.2)
depends/Makefile

[warning] 74-74: Target "host" should be declared PHONY.

(phonydeclared)


[warning] 76-76: Target "host" should be declared PHONY.

(phonydeclared)

🪛 Flake8 (7.3.0)
contrib/devtools/symbol-check.py

[error] 166-166: continuation line missing indentation or outdented

(E122)


[error] 167-167: continuation line missing indentation or outdented

(E122)

🪛 LanguageTool
depends/README.md

[grammar] ~100-~100: Use a hyphen to join words.
Context: ...ons needed for LTO. Does not add -flto related options to *FLAGS. - `NO_HARDEN=...

(QB_NEW_EN_HYPHEN)

🪛 markdownlint-cli2 (0.18.1)
depends/README.md

21-21: Link text should be descriptive

(MD059, descriptive-link-text)


53-53: Heading style
Expected: setext; Actual: atx

(MD003, heading-style)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
  • GitHub Check: arm-linux-gnueabihf / Build depends
  • GitHub Check: Lint / Run linters
  • GitHub Check: x86_64-w64-mingw32 / Build depends
  • GitHub Check: x86_64-pc-linux-gnu_multiprocess / Build depends
  • GitHub Check: x86_64-apple-darwin / Build depends
  • GitHub Check: x86_64-pc-linux-gnu_nowallet / Build depends
  • GitHub Check: x86_64-pc-linux-gnu / Build depends
🔇 Additional comments (17)
depends/packages/native_libmultiprocess.mk (1)

3-3: LGTM: Source migrated to official Bitcoin Core organization.

The download source has been updated from chaincodelabs to the official bitcoin-core organization, which improves trust and aligns with the repository migration. The successful automated builds confirm that the sha256 hash remains valid for the new source.

contrib/devtools/symbol-check.py (2)

166-167: LGTM! Flake8 warnings are false positives.

The addition of dbghelp.dll and the inline comment for bcrypt.dll are appropriate. The dbghelp.dll library provides debugging and stack trace functionality, which aligns with the exported symbols rationale mentioned in Line 289. The Flake8 E122 indentation warnings are false positives—the indentation is consistent with all other entries in the set.


289-290: Disabling the exported symbols check is well-documented.

The Dash-specific comment clearly explains the rationale for commenting out the EXPORTED_SYMBOLS check. This change is consistent with the addition of dbghelp.dll (Line 167) to support improved backtrace generation. Keeping the function definition for check_exported_symbols (lines 210-221) is reasonable in case the check needs to be re-enabled in the future.

depends/README.md (2)

1-68: Strong documentation structure with clear OS-specific guidance and improved section organization.

The restructuring enhances clarity by leading with "Depends build" and a descriptive introduction, then organizing content into logical sections (Usage per OS, configuration guidance, options). The new "Configuring Dash Core" section (lines 56–67) addresses a critical configuration step with concrete CONFIG_SITE examples. OS-specific sections maintain consistent formatting and are accurate.


100-100: No action required—text matches upstream Bitcoin Core.

The line reads "Does not add -flto related options to *FLAGS." in both the Dash PR and Bitcoin Core's upstream master branch. Per backport policy, the text should be preserved as-is to maintain fidelity with the original upstream implementation and avoid merge conflicts in future backports, even though the compound adjective lacks hyphenation.

depends/patches/native_capnp/fix_openbsd_build.patch (2)

1-34: LGTM: Patch correctly fixes netinet/in.h inclusion for BSDs.

The patch removes the FreeBSD-only guard and makes netinet/in.h available on all non-Windows systems, which should fix OpenBSD builds without affecting other platforms.


36-71: LGTM: Patch correctly excludes OpenBSD from kqueue path.

The patch appropriately removes OpenBSD from the KJ_USE_KQUEUE condition since OpenBSD's kqueue implementation lacks user event filter support. The fallback to poll()-based implementation is the correct solution.

depends/patches/capnp/abi_placement_new.patch (1)

1-70: LGTM: Patch correctly addresses GCC/Clang ABI incompatibility.

This patch solves a real issue where GCC and Clang use different calling conventions for empty struct parameters. By moving the PlacementNew parameter to the end of operator new and operator delete, the code becomes ABI-compatible across both compilers, preventing potential segfaults when mixing compiler outputs without optimizations.

The changes are minimal, focused, and technically correct:

  • Reorders parameters in operator new/delete declarations
  • Updates the call site in ctor to match
  • Includes comprehensive explanation of the problem and solution
depends/patches/libevent/winver_fixup.patch (1)

1-122: Windows macro/include ordering changes look correct and safe

The patch consistently moves _WIN32_WINNT (and WIN32_LEAN_AND_MEAN where used) ahead of any Windows headers in event_iocp.c, evthread_win32.c, evutil.c, and listener.c, while preserving #ifdef _WIN32 guards and keeping <winsock2.h> before <windows.h>. #if/#endif pairs are balanced, non-Windows builds are unaffected, and the behavioral changes (mainly making WIN32_LEAN_AND_MEAN and _WIN32_WINNT set once per TU instead of define/undef around headers) align with the stated intent and upstream backporting practices. I don’t see any issues to block this patch.
Based on learnings

depends/packages/qt.mk (2)

7-9: FreeBSD deps aliasing looks good.

Mirroring Linux deps to FreeBSD is reasonable here. Please confirm all listed XCB/* deps build in your FreeBSD depends environment.


165-166: Indirection for FreeBSD config opts is fine; verify mkspec/platform flags.

Using := $$($(package)_config_opts_linux) defers to the Linux opts at use time, so later toolchain-specific additions are inherited. Verify that -platform/-xplatform linux-* mkspecs work on FreeBSD in this Qt static build context.

configure.ac (2)

949-951: LGTM: explicit FreeBSD target mapping.

Clearer than lumping under generic BSD; no issues spotted.


1198-1211: LGTM: BSD execinfo detection via host pattern.

Switching to $host matches FreeBSD use-cases and avoids spurious Linux link flags.

src/util/threadnames.cpp (1)

42-57: Name copy/truncation logic is OK.

Bounded copy with explicit NUL is correct for 127-byte limit; no further issues.

depends/config.sub (1)

3-8: Upstream sync to 2024-05-27 looks good.

No project-specific concerns.

depends/config.guess (1)

3-8: Upstream sync to 2024-07-27 looks good.

Additions (LLVM libc, new OS cases) are benign.

depends/Makefile (1)

74-80: HOST defaulting and canonicalization logic reordered as part of build infrastructure backport.

The changes move HOST defaulting to after the initial host assignment and add conditional override logic before canonical_host derivation. This aligns with the broader build infrastructure refactoring (particularly FreeBSD support enhancements) across this backport series. The reordering allows HOST to be conditionally overridden before canonical host computation, which is intentional for the updated build initialization flow.

Note: The static analysis warning that "target 'host' should be declared PHONY" is a false positive—these are variable assignments, not make targets, so the PHONY declaration warning does not apply.

As per learnings: For backport PRs from Bitcoin Core, backported changes should match upstream implementations exactly. This reordering appears consistent with the intended build infrastructure changes.

Comment on lines +4 to +6
build_freebsd_SHA256SUM = sha256sum
build_freebsd_DOWNLOAD = curl --location --fail --connect-timeout $(DOWNLOAD_CONNECT_TIMEOUT) --retry $(DOWNLOAD_RETRIES) -o

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

Ensure sha256sum is available on FreeBSD builders (or add fallback).

FreeBSD base ships sha256, not sha256sum. If Guix/Coreutils isn’t present on the FreeBSD builder, -c verification will fail.

Option A: verify sha256sum exists in your FreeBSD build env.
Option B: switch back to a portable tool or add a guarded fallback.

Based on learnings.


🏁 Script executed:

# Quick check on builder
command -v sha256sum || command -v shasum || command -v sha256

Length of output: 0


I need to examine the codebase context to properly assess this issue. Let me gather more information about the build environment setup and how SHA256 tools are handled across different builders.




🏁 Script executed:

#!/bin/bash
# Show the freebsd.mk file content around lines 4-6
fd -t f 'freebsd.mk' -x cat {}

echo "---"
echo "Checking other builder files for SHA256SUM patterns:"
fd -t f '\.mk$' -path '*/builders/*' -x grep -l 'SHA256SUM' {}

Length of output: 1345


🏁 Script executed:

#!/bin/bash
# Compare SHA256SUM definitions across builders
echo "=== SHA256SUM definitions in all builders ==="
fd -t f '\.mk$' -path '*/builders/*' -x grep -n 'SHA256SUM' {}

echo ""
echo "=== Checking for sha256/shasum/sha256sum references in build system ==="
rg -n 'sha256sum|shasum' --type-list | head -20
fd -t f \( -name '*.mk' -o -name '*.sh' -o -name 'Makefile' \) -x rg -l 'sha256sum|shasum' {}

Length of output: 908


Let me fix the syntax errors and properly search the codebase:




🏁 Script executed:

#!/bin/bash
# Find all builder files
echo "=== All builder .mk files ==="
find depends/builders -name '*.mk' -type f

echo ""
echo "=== SHA256SUM definitions across all builders ==="
grep -n 'SHA256SUM' depends/builders/*.mk

Length of output: 733


🏁 Script executed:

#!/bin/bash
# Search for actual usage of sha256sum in the codebase
echo "=== References to SHA256SUM variable ==="
rg -n 'SHA256SUM' 

echo ""
echo "=== Direct sha256sum tool references ==="
rg -n 'sha256sum' --type sh --type mk

echo ""
echo "=== FreeBSD specific SHA256 references ==="
rg -n 'sha256' depends/builders/freebsd.mk

Length of output: 8305



---

🌐 Web query:

```web
FreeBSD base system sha256sum vs sha256 command availability

💡 Result:

Short answer: FreeBSD historically provided a sha256 command (from the base's libmd/OpenSSL utilities) while the GNU-style sha256sum was not in base until more recently. Recent FreeBSD releases (e.g. FreeBSD 14 series) include a sha256sum manpage and the utility is available in base; older releases relied on sha256 / shasum (from ports/perl/coreutils) or openssl dgst. Check your installed release to see which is present (which sha256 sha256sum shasum). [1][2][3]

Sources:

  • FreeBSD sha256/sha256sum manpage (FreeBSD 14.3 manpath). [1]
  • Discussion/StackOverflow: FreeBSD provides md5/sha* utilities via base libraries (libmd / OpenSSL). [2]
  • Project/commit discussion noting use of sha256sum in FreeBSD base (example: bitcoin depends change). [3]




🏁 Script executed:

#!/bin/bash
# Search for FreeBSD version specs or build environment docs
echo "=== Looking for FreeBSD version references ==="
rg -n 'freebsd.*14|freebsd.*13|freebsd.*12' -i

echo ""
echo "=== Looking for Guix or build environment setup ==="
fd -t f 'guix*' -o 'Dockerfile*' -o 'manifest*' 
find . -name 'guix*' -o -name 'Dockerfile*' -o -name '*manifest*' 2>/dev/null | head -20

echo ""
echo "=== Check depends documentation ==="
ls -la depends/*.md depends/*.txt 2>/dev/null || echo "No docs found"

echo ""
echo "=== Check for environment/requirements files ==="
fd -t f 'requirements|README|INSTALL' depends/

Length of output: 1524


🏁 Script executed:

#!/bin/bash
# Check git history for sha256sum change in freebsd.mk
echo "=== Recent changes to freebsd.mk ==="
git log --oneline -n 20 depends/builders/freebsd.mk 2>/dev/null || echo "Git history unavailable"

echo ""
echo "=== Full git blame for SHA256SUM line ==="
git blame depends/builders/freebsd.mk 2>/dev/null | grep -A1 -B1 'SHA256SUM' || echo "Git blame unavailable"

Length of output: 660





🏁 Script executed:

#!/bin/bash
# Check what was the prior SHA256SUM setting before the recent change
echo "=== Prior state of freebsd.mk before sha256sum change ==="
git show 8d887c34abd~1:depends/builders/freebsd.mk 2>/dev/null | head -20 || echo "Cannot show prior state"

echo ""
echo "=== Commit message for the sha256sum change ==="
git log -1 --format=fuller 8d887c34abd 2>/dev/null || echo "Cannot show commit"

echo ""
echo "=== Check if there's any FreeBSD version pinning in build setup ==="
cat doc/build-freebsd.md 2>/dev/null || echo "No build-freebsd.md"

Length of output: 4388


🏁 Script executed:

#!/bin/bash
# Check Guix manifest for FreeBSD or sha256sum/coreutils
echo "=== Guix manifest content ==="
cat contrib/guix/manifest.scm 2>/dev/null | head -100

echo ""
echo "=== Search for sha256sum in Guix files ==="
rg 'sha256sum|coreutils' contrib/guix/ contrib/containers/guix/

Length of output: 5635


Revert sha256sum to portable shasum -a 256 or ensure coreutils availability.

This is a regression: the recent change (commit 8d887c3, Jan 9) switched FreeBSD from shasum -a 256 to sha256sum. However, FreeBSD 12.3 does not include sha256sum in base, and your build documentation explicitly targets FreeBSD 12.3. The prior shasum -a 256 was portable across BSD variants.

Either revert to shasum -a 256 (the documented target won't have sha256sum without coreutils), ensure coreutils is a declared FreeBSD build dependency, or update documentation to require FreeBSD 14+.

🤖 Prompt for AI Agents
In depends/builders/freebsd.mk around lines 4 to 6, the change replaced the
portable "shasum -a 256" with "sha256sum", which breaks builds on the documented
FreeBSD 12.3 target since sha256sum isn't in base; either revert
build_freebsd_SHA256SUM to use "shasum -a 256", or add a small portability fix:
detect availability of sha256sum and otherwise use "shasum -a 256" (or declare
coreutils as a required dependency and update the FreeBSD build docs to require
coreutils or a newer FreeBSD); implement one of these options and update the
README/docs to reflect the chosen requirement.

Comment on lines +38 to 39
$(call fetch_file_inner,$(1),$(FALLBACK_DOWNLOAD_PATH),$(4),$(4),$(5)))
endef
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

Confirm fallback filename mapping won’t break packages with renamed downloads.

Fallback now requests "$(FALLBACK_DOWNLOAD_PATH)/$(4)". If any package sets $(package)_download_file != $(package)_file_name, fallback may 404. Please verify.

Run to list packages that define custom download_file and compare:


🏁 Script executed:

#!/bin/bash
# List packages defining *_download_file and *_file_name and show differing values
rg -nP '^\s*\$\((\w+)\)_download_file\s*=' depends/packages | while read -r line; do
  file=$(echo "$line" | cut -d: -f1)
  pkg=$(sed -n 's/^package=\(.*\)$/\1/p' "$file")
  df=$(sed -n 's/^\$\('"$pkg"'\)_download_file\s*=\s*\(.*\)$/\2/p' "$file")
  fn=$(sed -n 's/^\$\('"$pkg"'\)_file_name\s*=\s*\(.*\)$/\2/p' "$file")
  if [ -n "$df" ] && [ -n "$fn" ] && [ "$df" != "$fn" ]; then
    echo "$pkg: download_file=$df  file_name=$fn  ($file)"
  fi
done

Length of output: 0


🏁 Script executed:

#!/bin/bash
# First, check directory structure and list package files
echo "=== Package files in depends/packages ==="
find depends/packages -type f -name "*.mk" | head -10

echo ""
echo "=== Search for _download_file definitions ==="
rg '_download_file\s*=' depends/packages -A 1 -B 1 | head -30

echo ""
echo "=== Search for _file_name definitions ==="
rg '_file_name\s*=' depends/packages -A 1 -B 1 | head -30

Length of output: 3870


Fallback filename mapping will break 4 packages with custom download filenames.

Verification found mismatched _download_file and _file_name in:

  • native_capnp.mk: download_file=capnproto-c++-$(version).tar.gz vs file_name=capnproto-cxx-$(version).tar.gz
  • capnp.mk: inherits mismatch from native_capnp
  • qrencode.mk: download_file=v$(version).tar.gz vs file_name=$(package)-$(version).tar.gz
  • backtrace.mk: download_file=$(version).tar.gz vs file_name=$(package)_$(version).tar.gz

The fallback now passes $(4) (file_name) where it should pass $(3) (download_file). This causes fallback mirror fetches to use local filenames instead of actual server filenames, resulting in 404 errors for these packages.

Correct the fallback call in depends/funcs.mk line 38 to pass $(3) instead of $(4) for the name parameter.

🤖 Prompt for AI Agents
In depends/funcs.mk around lines 38-39, the fallback call currently forwards
$(4) (local file_name) to fetch_file_inner which breaks packages whose download
filenames differ; change the argument to pass $(3) (download_file) instead of
$(4) so the fallback mirror fetch uses the actual server filename; update the
single call on that line to replace the name parameter from $(4) to $(3) and
keep all other arguments unchanged.

@kwvg
Copy link
Collaborator Author

kwvg commented Nov 14, 2025

Checksums for 8e79c7a

26105676ac0b43f60aa68a4fc86d910a86a8f5b156854abb0a855d748cf45295  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-aarch64-linux-gnu-debug.tar.gz
cc32f05005a5b81ed867790c27388337b83b99f1360e53baa8bd961acc5a775b  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-aarch64-linux-gnu.tar.gz
9d879c793aee7470ab2a1a14a8d5f4a333d5cdf7ac0b4a3a42ea1bf09383627b  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-arm64-apple-darwin-unsigned.tar.gz
46836bddafba8338cdec6422e4e095d2bc43710c5e04f034a75ec1309870b4b1  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-arm64-apple-darwin-unsigned.zip
5122d9f3e27bceac300260b9e5a54040259ad4bcdc8ffd0dff2ec3e96a2f9b95  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-arm64-apple-darwin.tar.gz
c555cd543d550b3327a7d6ae411dffce4cc7c36b5788a6f63ca26463d0d26f36  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10.tar.gz
d1404882a88f6aa0d048af855e2243ee34440912f6dcb123fedc86afc3f04000  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-riscv64-linux-gnu-debug.tar.gz
4941c883edec77426f53e5365b8cafe6980b8572344e46342cfedbbbed8492b5  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-riscv64-linux-gnu.tar.gz
da3b21f4ad059323c7529bef0f94eff5e98e68487b86fd1883934b51e59aaf5f  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-x86_64-apple-darwin-unsigned.tar.gz
e3d6df3ce1a7e538b1336efcf393ad1b40c9573c720f6abbdec6e69d1715c834  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-x86_64-apple-darwin-unsigned.zip
04533ca989a6b156114881432bbc2e7c3e4ac13d15181c46889f819eb241d612  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-x86_64-apple-darwin.tar.gz
e7029b924fbace1fad2e687fbd7ef5b68d61ffe4c57995c32d6f4acb6611b0fe  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-x86_64-linux-gnu-debug.tar.gz
20a96ee893b2021e3a3532fdd368f7c897b30a91b382ac64178134ee0de31056  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-x86_64-linux-gnu.tar.gz
5ec3276ed23d465077e6017e17162d5c2595c0ea4c316784fe511454d68d9bbb  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-win64-debug.zip
f19d470584bccd33d301e7b82f80513f245fb8c5fd5d340aad7088aa5e166bbb  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-win64-setup-unsigned.exe
d2a2da456d5fcbafcfb85900c9012b453a80c535d40b027b1dfd1e60bd2440fc  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-win64-unsigned.tar.gz
4b246a5eb5f6ecbcf9dd6f40cf8eefd8e9b9eeee144084bdf75fb296a0164cf0  dashcore-23.0.0-rc.3-394-g8e79c7ac1e10-win64.zip

Copy link

@UdjinM6 UdjinM6 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rebase looks clean, new commits are good too

re-utACK 8e79c7a

@kwvg
Copy link
Collaborator Author

kwvg commented Nov 14, 2025

@UdjinM6 there are additional commits, ee9e934, f97d3d6 and 8e79c7a that weren't there in the previous force-push

@UdjinM6
Copy link

UdjinM6 commented Nov 14, 2025

oh, indeed, I missed a couple of -: ---------- > in range-diff 🙈 thanks for the heads up! 👍

@DashCoreAutoGuix
Copy link

Guix Automation has completed; a release should be present here: https://github.com/dashpay/dash-dev-branches/releases/tag/v23.0.0-devpr6919.8e79c7ac. The image should be on dockerhub soon.

@PastaPastaPasta PastaPastaPasta merged commit 9590d57 into dashpay:develop Nov 14, 2025
31 of 36 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants